package com.tanhua.server.controller;

import com.tanhua.model.db.UserInfo;
import com.tanhua.model.vo.PageResult;
import com.tanhua.model.vo.SettingsVo;
import com.tanhua.model.vo.UserInfoVo;
import com.tanhua.server.interceptor.UserHolder;
import com.tanhua.server.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("/users")
public class UsersControler {

    @Autowired
    private UsersService usersService;

    /**
     * 查询用户资料
     *   请求连接 GET /users?userID=123
     *   请求参数：
     *      query：userID
     *      header：Authorization
     *   返回值
     *      ResponseEntity
     */
    @GetMapping
    public ResponseEntity users(Long userID) {
        //1、判断id，获取id
        Long userId = userID;
        if(userId == null) {
            userId = UserHolder.getUserId();
        }
        //2、调用service查询
        UserInfoVo userInfo = usersService.findById(userId);
        //3、构造返回值
        return ResponseEntity.ok(userInfo);
    }

    /**
     * 更新用户资料
     *   请求连接 ：put  /uses
     *   请求参数：
     *      body：userInfo
     */
    @PutMapping
    public ResponseEntity update(@RequestBody UserInfo userInfo) {
        userInfo.setId(UserHolder.getUserId());
        //调用service
        usersService.updateUserInfo(userInfo);
        return ResponseEntity.ok(null);
    }

    /**
     * 查询通用设置
     *   请求连接 ：get  /settings
     *   参数：token
     *   返回值：SettingsVo
     */
    @GetMapping("/settings")
    public ResponseEntity settings() {
        SettingsVo vo = usersService.settings();
        return ResponseEntity.ok(vo);
    }

    /**
     * 设置陌生人问题（保存或者更新）
     *   请求的连接：POST /questions
     *   请求的参数：
     *     Body   content
     *   返回值：ResponseEntity
     */
    @PostMapping("/questions")
    public ResponseEntity questions(@RequestBody Map map) {
        //1、获取参数
        String content = (String) map.get("content");
        //2、调用service
        usersService.saveQuestions(content);
        return ResponseEntity.ok(null);
    }

    /**
     * 保存或者更新通知设置
     *  请求的连接：POST /notifications/setting
     *  请求的参数：
     *     Body ：likeNotification，pinglunNotification，gonggaoNotification
     *  返回值：ResponseEntity
     */
    @PostMapping("/notifications/setting")
    public ResponseEntity setting(@RequestBody Map map) {
        usersService.saveSettings(map);
        return ResponseEntity.ok(null);
    }

    /**
     * 分页查询黑名单列表
     *      GET  /blacklist?page=1&pagesize=10
     *      请求参数：
     *         query：page，pagesize
     *      返回值：
     *      ResponseEntity<PageResult>
     */
    @GetMapping("/blacklist")
    public ResponseEntity blacklist(@RequestParam(defaultValue = "1") Integer page,
                                    @RequestParam(defaultValue = "10") Integer pagesize) {
        PageResult result = usersService.blacklist(page,pagesize);
        return ResponseEntity.ok(result);
    }

    /**
     * 移除黑名单
     *  连接：  DELETE   /blacklist/{blackUserId}
     *  请求参数：
     *     路径参数  blackUserId：被拉黑的用户id
     *          @PathVariable
     */
    @DeleteMapping("/blacklist/{blackUserId}")
    public ResponseEntity deleteBlackList(@PathVariable("blackUserId") Long blackUserId) {
        usersService.deleteBlackList(blackUserId);
        return ResponseEntity.ok(null);
    }

    /**
     * 查询-互相喜欢、喜欢、粉丝、谁看过我
     *     GET  /friends/{type}
     *      type：
     *          1：查询相互喜欢
     *          2：查询喜欢的
     *          3：查询粉丝
     *          4；查询访客
     *      * 今日只完成4
     *    返回值：
     *      PageResult<UserLikeListVo>
     */
    @GetMapping("/friends/{type}")
    public ResponseEntity friends(@PathVariable("type") Integer type,
                                  @RequestParam(defaultValue = "1") Integer page,
                                  @RequestParam(defaultValue = "10") Integer pagesize) {
        PageResult result = usersService.friends(type,page,pagesize);
        return ResponseEntity.ok(result);
    }

}
